// 工具函数：安全解析时间字符串（支持HH:mm和HH:mm:ss格式）
export function parseTimeToDate(timeStr, baseDate = new Date()) {
	if (!timeStr) {
		return
	}
	const [h, m = 0, s = 0] = timeStr?.split(':').map(Number);
	const date = new Date(baseDate);
	date.setHours(h, m, s, 0);
	return date;
}

/**
 * 标准化日期格式并计算未来日期
 * @param {string} dateStr - 原始日期字符串（支持 / . 分隔符）
 * @param {number} [daysAfter=0] - 要增加的天数（可选，默认为0）
 * @returns {string|undefined} 标准化后的日期（YYYY-MM-DD），若输入无效返回 undefined
 */
export function normalizeDateStr(dateStr, daysAfter = 0) {
	if (!dateStr) return undefined;

	// 1. 标准化日期格式（替换 / . 为 -）
	const normalized = dateStr.replace(/[\/\.]/g, '-');

	// 2. 解析为日期对象（兼容 Safari，强制转换为本地时间）
	const date = new Date(normalized + 'T00:00:00');
	if (isNaN(date.getTime())) return normalized; // 若日期无效，返回原始标准化值

	// 3. 计算未来日期
	date.setDate(date.getDate() + daysAfter);

	// 4. 格式化为 YYYY-MM-DD
	const year = date.getFullYear();
	const month = String(date.getMonth() + 1).padStart(2, '0');
	const day = String(date.getDate()).padStart(2, '0');

	return `${year}-${month}-${day}`;
}
//配是否在结束可售出时间内
export function setSellTime(endYmd) {
	const now = new Date();
	const todayStr = now.toISOString().slice(0, 10);
	const currentDate = normalizeDateStr(todayStr);
	const endDate = normalizeDateStr(endYmd, 2);
	if (currentDate <= endDate) return true
	return false
}

// 主逻辑：获取活动状态（使用位运算提高性能）
export function getBotTime(item) {
	if (!item) {
		return
	}
	const now = new Date();
	const todayStr = now.toISOString().slice(0, 10);

	// 标准化日期比较
	const startDate = normalizeDateStr(item.beginYmd);
	const endDate = normalizeDateStr(item.endYmd);
	const currentDate = normalizeDateStr(todayStr);

	// 边界检查
	if (currentDate > endDate) return 0; // 已结束
	if (currentDate < startDate) return 2; // 预售

	// 时间范围检查（使用性能更优的分钟数比较）
	const startMinutes = convertTimeToMinutes(item.axRound.dayBeginTime);
	const endMinutes = convertTimeToMinutes(item.axRound.dayEndTime);
	const currentMinutes = now.getHours() * 60 + now.getMinutes();

	return (currentMinutes >= startMinutes && currentMinutes <= endMinutes) ?
		3 // 售卖中
		:
		1; // 即将开始
}

// 辅助函数：时间字符串转分钟数（优化性能）
function convertTimeToMinutes(timeStr) {
	if (!timeStr) {
		return
	}
	const [h, m = 0] = timeStr?.split(':').map(Number);
	return h * 60 + m;
}

// 使用模块闭包变量替代 this 依赖（避免箭头函数绑定问题）
const countTimeCache = {
	lastCalculation: 0,
	lastResult: undefined,
	lastKey: undefined
};
/**
 * 计算距离开始时间的秒数（支持跨天活动）
 * @param {Object} item - 活动对象 
 * @param {string} item.dayBeginTime - 开始时间（格式："HH:mm"或"HH:mm:ss"）
 * @param {string} item.dayEndTime - 结束时间
 * @param {string} [item.cacheKey] - 可选缓存标识
 * @returns {number} 剩余秒数（总是 >= 0）
 */
export function getCountTime(item) {
	const now = Date.now();
	const cacheKey = item?.cacheKey || `${item.axRound.dayBeginTime}-${item.axRound.dayEndTime}`;

	if (!item.axRound.dayBeginTime || !item.axRound.dayEndTime) {
		return
	}


	// 缓存校验（1秒内且相同活动直接返回）
	if (now - countTimeCache.lastCalculation < 1000 &&
		cacheKey === countTimeCache.lastKey &&
		countTimeCache.lastResult !== undefined) {
		return countTimeCache.lastResult;
	}

	// 计算逻辑
	const startTime = parseTimeToDate(item.axRound.dayBeginTime);
	const endTime = parseTimeToDate(item.axRound.dayEndTime);
	let seconds = 0;

	if (now < (startTime?.getTime() || 0)) {
		seconds = Math.floor((startTime.getTime() - now) / 1000);
	} else {
		seconds = Math.floor((startTime.getTime() + 86400000 - now) / 1000);
	}

	// 边界保护
	seconds = Math.max(0, seconds);

	// 更新缓存
	countTimeCache.lastCalculation = now;
	countTimeCache.lastResult = seconds;
	countTimeCache.lastKey = cacheKey;

	return seconds;
}

export function getCustomAmount(customAmount) {
	let value = customAmount;

	// 1. 过滤非法字符（非数字、小数点）
	let cleaned = value.replace(/[^\d.]/g, '');

	// 2. 处理多个小数点（只保留第一个）
	const dotIndex = cleaned.indexOf('.');
	if (dotIndex !== -1) {
		cleaned = cleaned.substring(0, dotIndex + 1) +
			cleaned.substring(dotIndex + 1).replace(/\./g, '');
	}

	// 3. 处理前导零（例如 "0123" → "123"）
	if (cleaned.startsWith('0') && cleaned !== '0' && !cleaned.startsWith('0.')) {
		cleaned = cleaned.replace(/^0+/, '');
		if (cleaned === '' || cleaned.startsWith('.')) cleaned = '0' + cleaned;
	}

	// 4. 限制小数点后最多两位
	const [integerPart, decimalPart] = cleaned.split('.');
	if (decimalPart && decimalPart.length > 2) {
		cleaned = ''
	}


	// 6. 更新绑定值（保留用户输入中间状态）
	return cleaned
}